home *** CD-ROM | disk | FTP | other *** search
/ Fritz: All Fritz / All Fritz.zip / All Fritz / FILES / SPREOTUS / 123FIN.LZH / PC-PAD.BAS < prev    next >
BASIC Source File  |  1983-09-25  |  18KB  |  337 lines

  1. 10      'PC\PAD: an MS-BASIC editor/spreadsheet/printing routine; 4/07/83
  2. 20       SCREEN 0,0,0:WIDTH 80:CLS:KEY OFF:LOCATE 5,1:Q$=SPACE$(20)
  3. 30  PRINT Q$;"          PC\PAD  (ver. 1.3)"
  4. 40  PRINT Q$;"an editor/spreadsheet/printing program"
  5. 50  PRINT: PRINT
  6. 60  PRINT Q$;"     If you are using this program"
  7. 70  PRINT Q$;"         and find it of value,"
  8. 80  PRINT Q$;"   a $20 contribution is suggested."
  9. 90  PRINT
  10. 100 PRINT Q$;"               (c) 1983"
  11. 110 PRINT Q$;"             P. Fraundorf"
  12. 120 PRINT Q$;"            P.O. Box 11394"
  13. 130 PRINT Q$;"          St. Louis MO 63105"
  14. 140 PRINT
  15. 150 PRINT Q$;"    You are encouraged to copy and"
  16. 160 PRINT Q$;"    share this program with others."
  17. 170      LOCATE 24,1: PRINT "any key to continue...";
  18. 180      Q$=INKEY$: IF Q$="" THEN 180
  19. 190      DEFINT I-N: LMX=400: HCW=8: CC$="\" 'set max lines,col width, & cc$
  20. 200      DIM A$(LMX+1),M$(50),CSUM(16),RSUM(25): IMX=LMX-22: JMX=IMX-20
  21. 210      LCW=2*HCW: LCM=LCW-1: DEF FNV(I,J)=VAL(MID$(A$(I),LCW*J+1,LCW))
  22. 220     DEF SEG=0: IF (PEEK(1040) AND 48)=48 THEN LD=13 ELSE LD=7 'mono/color
  23. 230     '-----------------------initialize function keys--------------------
  24. 240     KEY ON
  25. 250     KEY 1,CC$+"view  "+CHR$(13)   'relist
  26. 260     KEY 2,CC$+"compute"+CHR$(13)  'update computed entries
  27. 270     KEY 3,CC$+"up    "+CHR$(13)   'look up
  28. 280     KEY 4,CC$+"down  "+CHR$(13)   'look down
  29. 290     KEY 5,CC$+"left  "+CHR$(13)   'look left
  30. 300     KEY 6,CC$+"right "+CHR$(13)   'look right
  31. 310     KEY 7,CC$+"yank  "+CHR$(13)   'yank line to memory
  32. 320     KEY 8,CC$+"put   "+CHR$(13)   'put line in text
  33. 330     KEY 9,CC$+"justify"+CHR$(13)  'right justify line
  34. 340     KEY 10,CC$+"save  "+CHR$(13)  'save + offer restart
  35. 350     '---------------------------open source file-----------------------
  36. 360     FOR I=0 TO LMX: A$(I)="": NEXT: CLS: ON ERROR GOTO 5000
  37. 370     PRINT "disk files:": FILES: PRINT
  38. 380     INPUT "disk file name (rtn=none)";F$
  39. 390     IF F$<>"" THEN GOSUB 1260 ELSE NLINE=0
  40. 400     '------------------------set up editing session--------------------
  41. 410     INPUT "working file name (rtn=disk file name)";G$
  42. 420     IF G$="" THEN G$=F$ 'if no working name, use disk file name
  43. 430     IF G$="" THEN END 'if still no working name, then exit program
  44. 440     IP=1: JP=0: IX=1: JY=1 'zero pointers
  45. 450     '-------------------------primary operating loop--------------------
  46. 460     J0=JP: J1=JP+22: GOSUB 890: LOCATE JY,1          'list lines jp,jp+22
  47. 470     COLOR 13,0: LINE INPUT "",X$ 'give control to BASIC screen editor
  48. 480     COLOR 10,0: JY=CSRLIN-1
  49. 490     XX=INSTR(X$,CC$): IF XX=0 THEN 770               'store new line
  50. 500     '-----------------------menu of command primitives------------------
  51. 510     Y$=MID$(X$,XX+1,1)
  52. 520     IF Y$="v" THEN 460                            'view window
  53. 530     IF Y$="c" THEN 9990                          'update computed entries
  54. 540     IF Y$="u" THEN IF JP>0 THEN JP=JP-1:GOTO 460 ELSE 460         'up 1
  55. 550     IF Y$="d" THEN IF JP<IMX THEN JP=JP+1:GOTO 460 ELSE 460       'down 1
  56. 560     IF Y$="l" THEN IF IP>HCW THEN IP=IP-HCW:GOTO 460 ELSE 460     'left 1
  57. 570     IF Y$="r" THEN IF IP<178-HCW THEN IP=IP+HCW:GOTO 460 ELSE 460 'right 1
  58. 580     IF Y$="y" THEN GOSUB 1382:GOTO 460           'yank line to memory
  59. 590     IF Y$="p" THEN GOSUB 1420:GOTO 460           'put line in text
  60. 600     IF Y$="j" THEN GOSUB 2060: GOTO 460          'justify line
  61. 610     IF Y$="s" THEN GOSUB 1340: GOTO 460          'save working file
  62. 620     IF Y$=CC$ THEN Y$=MID$(X$,XX+2,1) ELSE 770
  63. 630    '-------------------------- 2-key functions ----------------------
  64. 640     IF Y$="v" THEN GOSUB 980: GOTO 460           'help file
  65. 650     IF Y$="c" THEN GOSUB 1190: GOTO 460          'reset filenames
  66. 660     IF Y$="u" THEN IF JP>19  THEN JP=JP-20:GOTO 460 ELSE JP=0  :GOTO 460
  67. 670     IF Y$="d" THEN IF JP<JMX THEN JP=JP+20:GOTO 460 ELSE JP=IMX:GOTO 460
  68. 680     IF Y$="l" THEN IF IP>64  THEN IP=IP-64:GOTO 460 ELSE IP=1  :GOTO 460
  69. 690     IF Y$="r" THEN IF IP<113 THEN IP=IP+64:GOTO 460 ELSE IP=177:GOTO 460
  70. 700     IF Y$="y" THEN GOSUB 1382:GOSUB 1410:GOTO 460 'remove line
  71. 710     IF Y$="p" THEN 1450                           'goto insert loop
  72. 720     IF Y$="j" THEN GOSUB 2010: GOTO 460          'reset linewidth
  73. 730     IF Y$="s" THEN GOSUB 1570: GOTO 460          'print file
  74. 740     IF Y$="q" THEN GOTO 360                      'quit/new file prompt
  75. 750    '-----------------------store previous screen line------------------
  76. 760    'it would be nice to use L$=X$, but alas X$ reflects complex i/o logic
  77. 770     L$="": II=0
  78. 780     JX=JP+JY-1: Y$=A$(JX): LA=LEN(Y$): IF LA>IP+79 THEN II=1
  79. 790     FOR I=79 TO 1 STEP -1
  80. 800             X$=CHR$(SCREEN(JY,I))
  81. 810             IF II=1 THEN L$=X$+L$ ELSE IF X$<>" " THEN II=1: GOTO 810
  82. 820             NEXT
  83. 830     LX=IP-1: LL=LEN(L$): IF JX+1>NLINE THEN NLINE=JX+1
  84. 840     IF LX>LA THEN A$(JX)=A$(JX)+STRING$(LX-LA," ")+L$: GOTO 870
  85. 850     IF LX>LA-79 THEN A$(JX)=LEFT$(A$(JX),LX)+L$: GOTO 870
  86. 860     A$(JX)=LEFT$(A$(JX),LX)+L$+STRING$(79-LL," ")+RIGHT$(A$(JX),LA-LX-79)
  87. 870     IF JY<23 THEN 470 ELSE IF JP<IMX THEN JP=JP+1:GOTO 460 ELSE 460
  88. 880    '-----------------------print lines from j0 to j1-------------------
  89. 890     CLS: LOCATE 24,1
  90. 900     COLOR 0,7:PRINT "^ ";G$;":";TAB(17);"^line";J0;"-";J1;TAB(33);"^col.";IP\LCW;"-";(IP+78)\LCW;TAB(49);"^for HELP:\[F1] ^keylist below:";
  91. 910     LOCATE 1,1,1,LD-1,LD
  92. 920     COLOR 6,0
  93. 930     FOR I=J0 TO J1
  94. 940            PRINT MID$(A$(I),IP,79)
  95. 950            NEXT
  96. 960     RETURN
  97. 970    '============================print help file===========================
  98. 980     CLS:Q$=SPACE$(6):LOCATE 4,1
  99. 990  PRINT Q$;"                 ***  available functions  ***": PRINT
  100. 1000  PRINT Q$;"[F1]  view file window           \[F1]  print help file"
  101. 1010 PRINT Q$;"     -------------spreadsheet computation key--------------"
  102. 1020 PRINT Q$;"[F2]  update computations        \[F2]  reset filenames"
  103. 1030 PRINT Q$;"     -----------------window movement keys-----------------"
  104. 1040 PRINT Q$;"[F3]  move up 1 line             \[F3]  move up 20 lines"
  105. 1050 PRINT Q$;"[F4]  move down 1 line           \[F4]  move down 20 lines"
  106. 1060 PRINT Q$;"[F5]  move left 1/2 column       \[F5]  move left 4 columns"
  107. 1070 PRINT Q$;"[F6]  move right 1/2 column      \[F6]  move right 4 columns"
  108. 1080 PRINT Q$;"     -----------------text processing keys-----------------"
  109. 1090 PRINT Q$;"[F7]  yank line into memory      \[F7]  yank and delete line"
  110. 1100 PRINT Q$;"[F8]  put yanked line in text    \[F8]  sequential line insert"
  111. 1110 PRINT Q$;"[F9]  right justify line         \[F9]  reset j-options"
  112. 1120 PRINT Q$;"     -------------------file output key--------------------"
  113. 1130 PRINT Q$;"[F10] save file to disk          \[F10] print file":PRINT
  114. 1140 PRINT Q$;"                        \\q  quit file
  115. 1150 LOCATE 24,1: PRINT "except for F# keys, any key to continue...";
  116. 1160 Q$=INKEY$: IF Q$="" THEN 1160
  117. 1170 RETURN
  118. 1180    '============================reset filenames==========================
  119. 1190    CLS
  120. 1200    PRINT "working filename (rtn=";G$;:INPUT")";X$:IF X$<>"" THEN G$=X$
  121. 1210    PRINT "instruction filename (rtn=";H$;:INPUT")";X$:IF X$<>"" THEN H$=X$
  122. 1220    INPUT "switch displays (rtn=no)";I$
  123. 1230    IF I$="" THEN RETURN
  124. 1240 IF LD=13 THEN DEF SEG=0:POKE &H410,(PEEK(&H410) AND &HCF) OR &H10:SCREEN 1,0,0,0:SCREEN 0:WIDTH 40:WIDTH 80:LOCATE ,,1,6,7:LD=7 ELSE IF LD=7 THEN DEF SEG=0:POKE &H410,(PEEK(&H410) OR &H30):SCREEN 0:WIDTH 40:WIDTH 80:LOCATE ,,1,12,13:LD=13
  125. 1250    RETURN
  126. 1260    '=============================load disk file===========================
  127. 1270    OPEN F$ FOR INPUT AS #1
  128. 1280    FOR NLINE=0 TO LMX
  129. 1290            LINE INPUT #1,A$(NLINE)
  130. 1300            IF EOF(1) THEN CLOSE #1: RETURN
  131. 1310            NEXT
  132. 1320    CLOSE #1: RETURN
  133. 1330   '=============================save file on disk=========================
  134. 1340    OPEN G$ FOR OUTPUT AS #1
  135. 1350    FOR I=0 TO NLINE
  136. 1360            PRINT #1,A$(I)
  137. 1370            NEXT
  138. 1380    CLOSE #1: RETURN
  139. 1381   '================================yank===================================
  140. 1382    LOCATE 24,1:INPUT;"# of lines (rtn=1) ";NM:IF NM<1 THEN NM=1
  141. 1383    IX=JP+JY-1
  142. 1384    FOR I=0 TO NM-1
  143. 1385            M$(I)=A$(IX+I)
  144. 1386            NEXT
  145. 1387    RETURN
  146. 1390   '===============================delete==================================
  147. 1400    IF NLINE>NM THEN NLINE=NLINE-NM ELSE NLINE=0
  148. 1410    FOR I=IX TO NLINE
  149. 1411            A$(I)=A$(I+NM)
  150. 1412            NEXT
  151. 1413    FOR I=NLINE+1 TO NLINE+NM+1
  152. 1414            A$(I)=""
  153. 1415            NEXT
  154. 1416    RETURN
  155. 1419   '=================================put===================================
  156. 1420    IX=JP+JY
  157. 1430    FOR J=NM-1 TO 0 STEP -1
  158. 1440            X$=M$(J):GOSUB 1520
  159. 1445            NEXT
  160. 1446    RETURN
  161. 1450   '============================insertion loop=============================
  162. 1460    CLS:J0=JP:J1=JP+JY-1:GOSUB 920:J0=J1+1:J1=JP+21:LOCATE JY+2,1:GOSUB 920
  163. 1470    COLOR 11,0: LOCATE JY+1,1,1,LD,0  'display split cursor
  164. 1480    LINE INPUT "",X$: X$=STRING$(IP-1," ")+X$: XX=INSTR(X$,CC$)
  165. 1490    IF XX<>0 THEN 460 ELSE IF CSRLIN<>JY+2 THEN BEEP: GOTO 1460
  166. 1500    IX=JP+JY:GOSUB 1520:JP=JP+1:GOTO 1460
  167. 1510   '--------------------------insert x$ at line ix------------------------
  168. 1520    FOR I=IX TO NLINE
  169. 1530            SWAP X$,A$(I)
  170. 1540            NEXT
  171. 1550    NLINE=NLINE+1: IF NLINE>LMX THEN NLINE=LMX: BEEP: RETURN
  172. 1560    A$(NLINE)=X$: RETURN
  173. 1570   '========================file printing routine==========================
  174. 1580   '------------------------set new printer options------------------------
  175. 1590    CLS: GOSUB 1940: LW=80: W$=""   'reset printer and initialize
  176. 1600    INPUT "top/bottom margins, in inches (rtn=0)";TBM
  177. 1610    INPUT "linespacing (d=double; t=triple; h=1/2; s=1/3; rtn=normal)";D$
  178. 1620    IF D$="" THEN LX=6 ELSE IF D$="d" THEN LX=3 ELSE IF D$="t" THEN LX=2
  179. 1630    IF D$="h" THEN LX=12 ELSE IF D$="s" THEN LX=18
  180. 1640    LM=TBM*LX: LPRINT CHR$(27);"A";CHR$(72/LX);CHR$(27);"2";'set linespace
  181. 1650    INPUT "characters/inch (s=16.5; m=8.25; l=5; rtn=10) ",C$
  182. 1660    IF C$="s" OR C$="m" THEN LPRINT CHR$(15);: LW=132 'set compressed width
  183. 1670    IF C$="l" OR C$="m" THEN W$=CHR$(14): LW=LW/2 'set double-width flag
  184. 1680    WIDTH "lpt1:",LW
  185. 1690    INPUT "intensity (d=double, e=emphasized, b=both, rtn=light) ",I$
  186. 1700    IF I$="d" OR I$="b" THEN LPRINT CHR$(27)+"G";'set doublestrike mode
  187. 1710    IF I$="e" OR I$="b" THEN LPRINT CHR$(27)+"E";'set emphasized intensity
  188. 1720    LPRINT CHR$(27);"D"; 'lines 100-120 set horiz. tabs (10,8,8,8...)
  189. 1730    FOR I=18 TO 74 STEP 8: LPRINT CHR$(I);: NEXT
  190. 1740    LPRINT CHR$(0);
  191. 1750    INPUT;"from row: ",I0
  192. 1760    INPUT;" to: ",I1:IF I1=0 THEN I1=NLINE:PRINT I1 ELSE PRINT
  193. 1770    INPUT;"from column: ",J0
  194. 1780    INPUT;" to: ",J1:IF J1=0 THEN J1=J0+7:PRINT J1 ELSE PRINT
  195. 1790    INPUT "indentation (rtn=0 spaces) ";INDENT
  196. 1800    IX=I0:J1=(J1-J0+1)*LCW:J0=J0*LCW+1:IF J1+INDENT>=LW THEN J1=LW-INDENT-1
  197. 1810  ' -------------------------------print file------------------------------
  198. 1820    FOR I=1 TO LM                             'begin page
  199. 1830            LPRINT
  200. 1840            NEXT
  201. 1850    FOR I=1 TO 11*LX-2*LM
  202. 1860            LPRINT SPC(INDENT);W$+MID$(A$(IX),J0,J1)
  203. 1870            IF IX<I1 THEN IX=IX+1 ELSE GOSUB 1940: RETURN
  204. 1880            NEXT
  205. 1890    FOR I=1 TO LM
  206. 1900            LPRINT
  207. 1910            NEXT
  208. 1920    GOTO 1820
  209. 1930   ' -----------------------------reset printer----------------------------
  210. 1940    LPRINT CHR$(27);"A";CHR$(12);'set default line-spacing to 12/72=1/6"
  211. 1950    LPRINT CHR$(27);"2";         'invoke default line-spacing
  212. 1960    LPRINT CHR$(18);             'compressed width off
  213. 1970    LPRINT CHR$(20);             'double-width off (optional)
  214. 1980    LPRINT CHR$(27)+"F";         'emphasized intensity off
  215. 1990    LPRINT CHR$(27)+"H";         'double-strike intensity off
  216. 2000    WIDTH "lpt1:",80: RETURN
  217. 2010   '=====================set linewidth for justification==================
  218. 2020    LOCATE 24,1: INPUT;"line width (rtn=60)";LWIDTH
  219. 2030    IF LWIDTH=0 THEN LWIDTH=60
  220. 2040    INPUT;"  how many lines at once (rtn=1)";JL: IF JL=0 THEN JL=1
  221. 2050    RETURN
  222. 2060   '---------------------------Justify Function--------------------------
  223. 2070    IF LWIDTH=0 THEN GOSUB 2020 'reset linewidth
  224. 2080    J0=JY+JP-1: J1=J0+JL-1: IF J1>NLINE THEN J1=NLINE
  225. 2090    FOR IX=J0 TO J1
  226. 2100            GOSUB 2140
  227. 2110            NEXT
  228. 2120    RETURN
  229. 2130   '----------------------------justify line------------------------------
  230. 2140    Y$=A$(IX)
  231. 2150   '-------------------------remove rightmost spaces----------------------
  232. 2160    YL=LEN(Y$):IF RIGHT$(Y$,1)=" " THEN Y$=LEFT$(Y$,YL-1):GOTO 2160
  233. 2170   '----------------------replace indentations with nulls-----------------
  234. 2180    IF LEFT$(Y$,1)=CHR$(9) THEN Y$="        "+RIGHT$(Y$,YL-1): YL=YL+7
  235. 2190    IF YL=0 OR YL=LWIDTH THEN RETURN
  236. 2200    Z$="": M=1
  237. 2210    WHILE LEFT$(Y$,1)=" ":Z$=Z$+CHR$(0):Y$=RIGHT$(Y$,YL-M):M=M+1:WEND
  238. 2220    Y$=Z$+Y$
  239. 2230   '------------------------optimize content of line----------------------
  240. 2240    IF YL<LWIDTH THEN GOSUB 2420 ELSE GOSUB 2590
  241. 2250   '---------------------right justify line if appropriate----------------
  242. 2260    YL=LEN(Y$): NEEDED=LWIDTH-YL
  243. 2270    IF INSTR(Y$," ")=0 THEN NEEDED=0
  244. 2280    C$=LEFT$(A$(IX+1),1)
  245. 2290    IF C$="" OR C$=" " OR C$=CHR$(0) OR C$=CHR$(9) THEN NEEDED=0
  246. 2300    Z$=""
  247. 2310    FOR I=1 TO NEEDED
  248. 2320            M=INSTR(Y$," ")
  249. 2330            IF M=0 THEN Y$=Z$+Y$: YL=LEN(Y$): Z$="": GOTO 2320
  250. 2340            IF M=1 THEN Z$=Z$+" ": Y$=RIGHT$(Y$,YL-1): YL=YL-1: GOTO 2320
  251. 2350            Z$=Z$+LEFT$(Y$,M)+" ": Y$=RIGHT$(Y$,YL-M): YL=YL-M
  252. 2360            NEXT
  253. 2370    Y$=Z$+Y$: YL=LEN(Y$)
  254. 2380   '---------------------replace initial nulls with spaces----------------
  255. 2390    Z$="": M=1
  256. 2400    WHILE LEFT$(Y$,1)=CHR$(0):Z$=Z$+" ":Y$=RIGHT$(Y$,YL-M):M=M+1:WEND
  257. 2410    A$(IX)=Z$+Y$: RETURN
  258. 2420   '---------------------line is too short..can we add some?--------------
  259. 2430    J=IX+1
  260. 2440    WHILE NLINE>=J
  261. 2450            C$=LEFT$(A$(J),1)
  262. 2460            IF C$="" OR C$=" " OR C$=CHR$(9) OR C$=CHR$(0) THEN RETURN
  263. 2470            WHILE A$(J)<>""
  264. 2480                    ZL=LEN(A$(J))
  265. 2490                    M=INSTR(A$(J)," "): IF M=0 THEN ZL=ZL+1: M=ZL
  266. 2500                    IF YL+M>LWIDTH THEN RETURN
  267. 2510                    YL=YL+M: Y$=Y$+" ": IF M>1 THEN Y$=Y$+LEFT$(A$(J),M-1)
  268. 2520                    A$(J)=RIGHT$(A$(J),ZL-M)
  269. 2530                    WEND
  270. 2540            Z$=""
  271. 2550            FOR I=NLINE TO J STEP -1: SWAP Z$,A$(I): NEXT
  272. 2560            NLINE=NLINE-1
  273. 2570            WEND
  274. 2580    RETURN
  275. 2590   '---------------------line is too long..take something off------------
  276. 2600    Z$=RIGHT$(Y$,YL-LWIDTH): YL=LWIDTH: Y$=LEFT$(Y$,LWIDTH)
  277. 2610    C$=RIGHT$(Y$,1): YL=YL-1: Y$=LEFT$(Y$,YL)
  278. 2620    IF C$<>" " THEN Z$=C$+Z$: GOTO 2610
  279. 2630    FOR I=IX+1 TO NLINE: SWAP Z$,A$(I): NEXT
  280. 2640    NLINE=NLINE+1: IF NLINE>LMX THEN NLINE=LMX: BEEP: RETURN
  281. 2650    A$(NLINE)=Z$: RETURN
  282. 5000   '======================error trapping (line 5000)==================
  283. 5010    Q$="        ...File not found...  "
  284. 5020    IF ERR=53 AND ERL=1270 THEN PRINT Q$: RESUME 370
  285. 5030    IF ERR=53 AND ERL=9990 THEN PRINT Q$;: H$="": RESUME 9990
  286. 5040    IF ERR=61 AND ERL=1360 THEN PRINT "Disk Full:make room before saving"
  287. 5050    IF ERR=25 AND ERL=1940 THEN PRINT "Printer not On-line"
  288. 5060    IF ERR=27 THEN PRINT "Out of Paper or Printer Off"
  289. 5070    PRINT: PRINT "error #";ERR;" at line ";ERL;"; type CONT to resume..."
  290. 5080    STOP: RESUME 460
  291. 9610    '===============spread sheet subroutines (line 9610)==============
  292. 9620    '---------------------------form column sums-------------------------
  293. 9630    IF NROW<2 THEN GOTO 9770
  294. 9640    FOR J=0 TO NCOL-1
  295. 9650            CSUM(J)=0
  296. 9660            FOR I=0 TO NROW-1
  297. 9670                    CSUM(J)=CSUM(J)+FNV(I+NROW0,J+NCOL0)
  298. 9680                    NEXT
  299. 9690            NEXT
  300. 9700    I=NROW0+NROW: TSUM=0
  301. 9710    FOR J=NCOL0 TO NCOL0+NCOL-1
  302. 9720            X=CSUM(J-NCOL0): GOSUB 9900
  303. 9730            TSUM=TSUM+CSUM(J-NCOL0)
  304. 9740            NEXT
  305. 9750    J=NCOL0+NCOL: X=TSUM: GOSUB 9900
  306. 9760    '---------------------------form row sums----------------------------
  307. 9770    IF NCOL<2 THEN RETURN
  308. 9780    FOR I=0 TO NROW-1
  309. 9790            RSUM(I)=0
  310. 9800            FOR J=0 TO NCOL-1
  311. 9810                    RSUM(I)=RSUM(I)+FNV(I+NROW0,J+NCOL0)
  312. 9820                    NEXT
  313. 9830            NEXT
  314. 9840    J=NCOL0+NCOL
  315. 9850    FOR I=NROW0 TO NROW0+NROW-1
  316. 9860            X=RSUM(I-NROW0): GOSUB 9900
  317. 9870            NEXT
  318. 9880    RETURN
  319. 9890   '-----------------replace row i, column j entry with x---------------
  320. 9900    X$=STR$(X)
  321. 9910   '-----------------replace row i, column j entry with x$--------------
  322. 9920    LX=LEN(X$)
  323. 9930    IF LX<LCM THEN X$=STRING$(LCM-LX," ")+X$ ELSE X$=LEFT$(X$,LCM)
  324. 9940    LA=LEN(A$(I)): LX=LCW*J
  325. 9950    IF LX>LA THEN A$(I)=A$(I)+STRING$(LX-LA," ")+X$: RETURN
  326. 9960    IF LX>LA-LCM THEN A$(I)=LEFT$(A$(I),LX)+X$: RETURN
  327. 9970    A$(I)=LEFT$(A$(I),LX)+X$+RIGHT$(A$(I),LA-LX-LCM): RETURN
  328. 9980   '----------------------update computed quantities--------------------
  329. 9990    IF H$="" THEN LOCATE 24,1: INPUT;"instruction filename";H$:                      IF H$="" THEN 460 ELSE CHAIN MERGE H$,10000,ALL
  330. 10000   '----------ROWCOL.BAS - sample row-column sum instructions-----------
  331. 10010   ON ERROR GOTO 5000 'this prevents disabling of error trapping
  332. 10020   NROW0=FNV(2,6):NCOL0=FNV(3,6):NROW=FNV(4,6):NCOL=FNV(5,6)  'read table
  333. 10030   GOSUB 9630                                                 'form sums
  334. 10040   I=NROW0+NROW: J=NCOL0-1: X$="Column Totals"   : GOSUB 9920 'label row
  335. 10050   I=NROW0-2: J=NCOL0+NCOL: X$="Row Totals"      : GOSUB 9920 'label col
  336. 10060   GOTO 460           'this exits to the View Function
  337.